## DESCRIPTION
## Trigonometry: trig functions in degrees
## ENDDESCRIPTION

## KEYWORDS('trigonometry', 'trig functions in degrees')

## DBsubject('WeBWorK')
## DBchapter('WeBWorK Tutorial')
## DBsection('Fort Lewis Tutorial 2011')
## Date('01/30/2011')
## Author('Paul Pearson')
## Institution('Fort Lewis College')
## TitleText1('')
## EditionText1('')
## AuthorText1('')
## Section1('')
## Problem1('')


###########################
#  Initialization

DOCUMENT();

loadMacros(
"PGstandard.pl",
"MathObjects.pl",
"AnswerFormatHelp.pl",
);

TEXT(beginproblem());


###########################
#  Setup

Context("Numeric");

##############################################
#  Begin trig functions in degrees

Context()->functions->remove("cos");
package NewFunc;
# this next line makes the function a 
# function from reals to reals
our @ISA = qw(Parser::Function::numeric);
sub cos {
  shift; my $x = shift;
  return CORE::cos($x*3.14159265358979/180);
}
package main;
# Make it work on formulas as well as numbers
# if uncommented, this next line will generate error messages
#sub cos {Parser::Function->call('cos',@_)} 
#  Add the new functions to the Context
Context()->functions->add( cos => {class => 'NewFunc', TeX => '\cos'}, );


Context()->functions->remove("sin");
package NewFunc;
# this next line makes the function a 
# function from reals to reals
our @ISA = qw(Parser::Function::numeric);
sub sin {
  shift; my $x = shift;
  return CORE::sin($x*3.14159265358979/180);
}
package main;
# Make it work on formulas as well as numbers
# if uncommented, this next line will generate error messages
#sub sin {Parser::Function->call('sin',@_)} 
#  Add the new functions to the Context
Context()->functions->add( sin => {class => 'NewFunc', TeX => '\sin'}, );


Context()->functions->remove("tan");
package NewFunc;
# this next line makes the function a 
# function from reals to reals
our @ISA = qw(Parser::Function::numeric);
sub tan {
  shift; my $x = shift;
  return CORE::sin($x*3.14159265358979/180)/CORE::cos($x*3.14159265358979/180);
}
package main;
# Make it work on formulas as well as numbers
sub tan {Parser::Function->call('tan',@_)}
#  Add the new functions to the Context
Context()->functions->add( tan => {class => 'NewFunc', TeX => '\tan'}, );


Context()->functions->remove("sec");
package NewFunc;
# this next line makes the function a 
# function from reals to reals
our @ISA = qw(Parser::Function::numeric);
sub sec {
  shift; my $x = shift;
  return 1.0/CORE::cos($x*3.14159265358979/180);
}
package main;
# Make it work on formulas as well as numbers
sub sec {Parser::Function->call('sec',@_)} 
#  Add the new functions to the Context
Context()->functions->add( sec => {class => 'NewFunc', TeX => '\sec'}, );


Context()->functions->remove("csc");
package NewFunc;
# this next line makes the function a 
# function from reals to reals
our @ISA = qw(Parser::Function::numeric);
sub csc {
  shift; my $x = shift;
  return 1.0/CORE::sin($x*3.14159265358979/180);
}
package main;
# Make it work on formulas as well as numbers
sub csc {Parser::Function->call('csc',@_)} 
#  Add the new functions to the Context
Context()->functions->add( csc => {class => 'NewFunc', TeX => '\csc'}, );


Context()->functions->remove("cot");
package NewFunc;
# this next line makes the function a 
# function from reals to reals
our @ISA = qw(Parser::Function::numeric);
sub cot {
  shift; my $x = shift;
  return CORE::cos($x*3.14159265358979/180)/CORE::sin($x*3.14159265358979/180);
}
package main;
# Make it work on formulas as well as numbers
sub cot {Parser::Function->call('cot',@_)}
#  Add the new functions to the Context
Context()->functions->add( cot => {class => 'NewFunc', TeX => '\cot'}, );



#sub asin {CORE::atan2($_[1],CORE::sqrt(1-$_[1]*$_[1]))}
#sub acos {CORE::atan2(CORE::sqrt(1-$_[1]*$_[1]),$_[1])}
#sub atan {CORE::atan2($_[1],1)}
#sub acot {CORE::atan2(1,$_[1])}
#sub asec {acos($_[0],1.0/$_[1])}
#sub acsc {asin($_[0],1.0/$_[1])}


Context()->functions->remove("acos");
package NewFunc;
# this next line makes the function a 
# function from reals to reals
our @ISA = qw(Parser::Function::numeric);
sub acos {CORE::atan2(CORE::sqrt(1-$_[1]*$_[1]),$_[1])*180/3.14159265358979}
package main;
# Make it work on formulas as well as numbers
sub acos {Parser::Function->call('acos',@_)}
#  Add the new functions to the Context
Context()->functions->add( acos => {class => 'NewFunc', TeX => '\arccos'}, );


Context()->functions->remove("asin");
package NewFunc;
# this next line makes the function a 
# function from reals to reals
our @ISA = qw(Parser::Function::numeric);
sub asin {CORE::atan2($_[1],CORE::sqrt(1-$_[1]*$_[1]))*180/3.14159265358979}
package main;
# Make it work on formulas as well as numbers
sub asin {Parser::Function->call('asin',@_)}
#  Add the new functions to the Context
Context()->functions->add( asin => {class => 'NewFunc', TeX => '\arcsin'}, );


Context()->functions->remove("atan");
package NewFunc;
# this next line makes the function a 
# function from reals to reals
our @ISA = qw(Parser::Function::numeric);
sub atan {CORE::atan2($_[1],1)*180/3.14159265358979}
package main;
# Make it work on formulas as well as numbers
sub atan {Parser::Function->call('atan',@_)}
#  Add the new functions to the Context
Context()->functions->add( atan => {class => 'NewFunc', TeX => '\arctan'}, );


Context()->functions->remove("asec");
package NewFunc;
# this next line makes the function a 
# function from reals to reals
our @ISA = qw(Parser::Function::numeric);
sub asec {CORE::atan2($_[1],CORE::sqrt(1-$_[1]*$_[1]))*180/3.14159265358979}
#sub asec {acos($_[0],1.0/$_[1])}
package main;
# Make it work on formulas as well as numbers
sub asec {Parser::Function->call('asec',@_)}
#  Add the new functions to the Context
Context()->functions->add( asec => {class => 'NewFunc', TeX => '\arcsec'}, );


Context()->functions->remove("acsc");
package NewFunc;
# this next line makes the function a 
# function from reals to reals
our @ISA = qw(Parser::Function::numeric);
sub acsc {CORE::atan2(CORE::sqrt(1-$_[1]*$_[1]),$_[1])*180/3.14159265358979}
#sub acsc {asin($_[0],1.0/$_[1])}
package main;
# Make it work on formulas as well as numbers
sub acsc {Parser::Function->call('acsc',@_)}
#  Add the new functions to the Context
Context()->functions->add( acsc => {class => 'NewFunc', TeX => '\arccsc'}, );


Context()->functions->remove("acot");
package NewFunc;
# this next line makes the function a 
# function from reals to reals
our @ISA = qw(Parser::Function::numeric);
sub acot {CORE::atan2(1,$_[1])*180/3.14159265358979}
package main;
# Make it work on formulas as well as numbers
sub acot {Parser::Function->call('acot',@_)}
#  Add the new functions to the Context
Context()->functions->add( acot => {class => 'NewFunc', TeX => '\arccot'}, );


#  End trig functions in degrees
###################################################



###########################
#  Main text

Context()->texStrings;
BEGIN_TEXT
Enter \( \sin(30) \): 
\{ ans_rule(20) \}
\{ AnswerFormatHelp("formulas") \}
$BR
Enter \( \arcsin(1/2) \): 
\{ ans_rule(20) \}
\{ AnswerFormatHelp("formulas") \}
$BR
Caution: Enter \( \arcsin(x) \) as \( \arcsin(x) \) or
\( \mathrm{asin}(x) \), but not \( \sin^{-1}(x) \).
END_TEXT
Context()->normalStrings;


###########################
#  Answer evaluation

$showPartialCorrectAnswers = 1;

ANS( Real(0.5)->cmp() );
ANS( Real(30)->cmp() );


###########################
#  Solution

Context()->texStrings;
BEGIN_SOLUTION
${PAR}SOLUTION:${PAR}
Solution explanation goes here.
END_SOLUTION
Context()->normalStrings;

COMMENT("MathObject version.  Redefines trig functions to be in degrees (not radians).");

ENDDOCUMENT();